package com.linktel.productionLine.controller;

import com.linktel.productionLine.common.BaseResponse;
import com.linktel.productionLine.common.ErrorCode;
import com.linktel.productionLine.common.ResultUtils;
import com.linktel.productionLine.entity.dto.displayStep.DisplayStepDTO;
import com.linktel.productionLine.entity.query.displayStep.AddDisplayStepQuery;
import com.linktel.productionLine.entity.query.displayStep.EditDisplayStepQuery;
import com.linktel.productionLine.exception.BusinessException;
import com.linktel.productionLine.service.DisplayStepService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 对产线月度规划产能信息的有关请求
 *
 * @Author HuangJiaHui
 * @Date 2023/8/25 9:35
 */
@RestController
@RequestMapping("/displayStep")
@AllArgsConstructor
public class DisplayStepController {

    private DisplayStepService displayStepService;

    /**
     * 查询当前用户管理的产线和它包含的工序
     *
     * @param currentUserId 当前用户id
     * @return 当前用户管理的产线和它包含的工序列表
     */
    @GetMapping
    public BaseResponse<List<DisplayStepDTO>> listDisplayStep(Long currentUserId) {
        if (currentUserId == null || currentUserId <= 0) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不完整");
        }
        return ResultUtils.success(displayStepService.listDisplayStep(currentUserId));
    }

    /**
     * 新增产线和它包含的工序
     *
     * @param addDisplayStepQuery 产线和它包含的工序新增对象的封装
     * @return 是否新增成功
     */
    @PostMapping
    public BaseResponse<Boolean> addDisplayStep(@RequestBody AddDisplayStepQuery addDisplayStepQuery) {
        if (addDisplayStepQuery == null ) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        return ResultUtils.success(displayStepService.addDisplayStep(addDisplayStepQuery));
    }

    /**
     * 根据产线id删除产线工序记录
     *
     * @param workLineCode 产线id
     * @return 是否删除成功
     */
    @DeleteMapping
    public BaseResponse<Boolean> deleteDisplayStep(String workLineCode) {
        if (workLineCode == null || "".equals(workLineCode)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        return ResultUtils.success(displayStepService.deleteDisplayStep(workLineCode));
    }

    /**
     * 根据产线id更新数据
     *
     * @param editDisplayStepQuery 更改封装类
     * @return 是否更新成功
     */
    @PutMapping
    public BaseResponse<Boolean> editDisplayStep(@RequestBody EditDisplayStepQuery editDisplayStepQuery) {
        if (editDisplayStepQuery == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        return ResultUtils.success(displayStepService.editDisplayStep(editDisplayStepQuery));
    }

}
